package cn.marinda.resturants.service.impl;

import cn.marinda.resturants.entity.Meal;
import cn.marinda.resturants.entity.User;
import cn.marinda.resturants.global.Pages;
import cn.marinda.resturants.mapper.UserMapper;
import cn.marinda.resturants.service.UserService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.swagger.annotations.*;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;

@Api(value = "用户实体类服务层实现类")
@Service("userService")
public class UserServiceImpl  extends ServiceImpl<UserMapper,User> implements UserService {

    /**
     * 修改用户
     *
     * @param user 用户
     * @return 修改结果
     */
    @Override
    public boolean update(User user) {
        User sqlEntity = baseMapper.selectById(user.getUid());
        if(sqlEntity== null){
            return false;
        }
        user.setVersion(sqlEntity.getVersion());
        //乐观锁修改
        return lambdaUpdate().eq(User::getUid,user.getUid()).eq(User::getVersion,user.getVersion()).set(User::getVersion,user.getVersion()+1).update(user);
    }

    /**
     * 添加用户
     *
     * @param user 用户
     * @return 是否成功
     */
    @Override
    public boolean addUser(User user) {
        user.setUid(UUID.randomUUID().toString());
        return baseMapper.insert(user)>0;
    }

    /**
     * 删除用户
     *
     * @param uid 用户ID
     * @return 是否成功
     */
    @Override
    public boolean deleteUser(String uid) {
        return baseMapper.deleteById(uid)>0;
    }

    /**
     * 查询所有用户信息
     *
     * @return 用户信息列表
     */
    @Override
    public List<User> queryList() {
        return baseMapper.selectList(null);
    }

    /**
     * 通过uid来查询一个用户
     *
     * @param uid 用户uid
     * @return 用户
     */
    @Override
    public User selectUserUid(String uid) {
        return baseMapper.selectById(uid);
    }

    /**
     * 模糊查询名字存在name的用户
     *
     * @param name 名
     * @return 用户
     * @date 2021/11/28
     */
    @Override
    public User selectLikeName(String name) {
        return baseMapper.selectLikeName(name);
    }

    /**
     * 返回一个指定日期的登录时间的所有用户
     *
     * @param startDate startDate
     * @param endDate
     * @return
     */
    @Override
    public List<User> selectLoginDate(String startDate, String endDate) {
        return baseMapper.selectLoginDate(startDate, endDate);
    }

    /**
     * 返回一个指定日期的注册时间的所有用户
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return 用户的集合
     */
    @Override
    public List<User> selectRegisterDate(String startDate, String endDate) {
        return baseMapper.selectRegisterDate(startDate, endDate);
    }

    /**
     * 在手机号唯一性给一个用户绑定的情况下
     *
     * @param phone
     * @return 用户
     */
    @Override
    public User selectPhone(String phone) {
        return baseMapper.selectPhone(phone);
    }

    /**
     * 查询属于某一会员的用户列表
     *
     * @param uid 用户uid
     * @return 用户集合
     */
    @Override
    public List<User> selectMember(int uid) {
        return baseMapper.selectMember(uid);
    }

    /**
     * 分页User
     *
     * @param pages 传输page数据
     * @return 迭代的page
     */
    @Override
    public IPage<User> selectPageList(Pages pages) {
      IPage<User> iPage = baseMapper.selectPages(pages);
        return iPage;
    }


}
